package cn.iocoder.an.module.business.controller.admin.feedback.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;

import java.time.LocalDate;
import java.util.*;
import jakarta.validation.constraints.*;

@Schema(description = "管理后台 - 快捷反馈新增/修改 Request VO")
@Data
public class FeedbackSaveReqVO {

    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19303")
    private Long id;

    @Schema(description = "投诉日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "投诉日期不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date complaintDate;

    @Schema(description = "上板日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "上板日期不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date boardtDate;

    @Schema(description = "计划关闭日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "计划关闭日期不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date planCloseDate;

    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @NotNull(message = "状态不能为空")
    private Integer status;

    @Schema(description = "问题来源", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "问题来源不能为空")
    private Integer problemSource;

    @Schema(description = "问题等级", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "问题等级不能为空")
    private String problemLevel;

    @Schema(description = "分布", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "分布不能为空")
    private Integer distribution;

    @Schema(description = "历时")
    private Integer duration;

    @Schema(description = "客户")
    private String customer;

    @Schema(description = "部门", example = "25955")
    private Long deptId;

    @Schema(description = "提出人", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "提出人不能为空")
    private Long proposer;

    @Schema(description = "是否重发", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "是否重发不能为空")
    private Integer resend;

    @Schema(description = "责任人", requiredMode = Schema.RequiredMode.REQUIRED, example = "17691")
    @NotNull(message = "责任人不能为空")
    private Long dutyUserId;

    @Schema(description = "解决小组成员", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "解决小组成员不能为空")
    private List<Long> solveUser;

    @Schema(description = "解决小组成员", example = "王五")
    private String solveUserName;

    @Schema(description = "D2:问题描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "随便")
    @NotEmpty(message = "D2:问题描述不能为空")
    private String problemDescription;

    @Schema(description = "领导指示")
    private String instruction;

    @Schema(description = "D2:到期日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date expirationDateTwo;

    @Schema(description = "D3:ICA临时措施")
    private String interimMeasures;

    @Schema(description = "D4:原因分析")
    private String reasonAnalysis;

    @Schema(description = "D3:到期日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date expirationDateThree;

    @Schema(description = "D4:到期日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date expirationDateFour;

    @Schema(description = "D5:PCA永久措施 ")
    private String longMeasures;


    @Schema(description = "D6:PCA验证结果 ")
    private String verify;

    @Schema(description = "D5:到期日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date expirationDateFive;

    @Schema(description = "D6:到期日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date expirationDateSix;

    @Schema(description = "程序文件、控制计划、FMEA、工艺文件是否更新")
    private List<String> files;

    @Schema(description = "D7:到期日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date expirationDateSeven;

    @Schema(description = "下次汇报日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date reportDate;

    @Schema(description = "问题关闭日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date problemCloseDate;

    @Schema(description = "售后或0公里")
    private Integer afterOr;

}